package websocket

import (
	"encoding/json"
	"gg_server/util"

	"github.com/olahol/melody"
)

// 客户端连接时 回调
func handleConnect(s *melody.Session) {
	// 获取token
	token := s.Request.Header.Get("Sec-WebSocket-Protocol")
	// 如果token 长度为0 直接关闭连接
	if len(token) == 0 {
		s.Close()
		return
	}

	// 判断 token是否合法
	jwt := util.MyJwt{}
	b := jwt.VerifyJwt(token)
	if !b {
		// token不合法
		s.Close()
		return
	}

	// 注册客户端
	CreateClient(jwt.Id, s)
}

// 客户端 断开时回调
func HandleDisconnect(s *melody.Session) {
	// 获取到 断开的客户端 id
	idAny, _ := s.Get("id")

	id := idAny.(int)

	c := clientMap[id]
	// 判断客户端是否关闭，如果没有关闭，说明只是客户端改变
	// 并没有 与服务器断开连接
	if !c.Session.IsClosed() {
		// 服务器与客户端并没有关闭连接
		return
	}

	// 将对应id的客户端从储存列表中移除
	delete(clientMap, id)
}

// 客户端发送消息时
func HandleMessage(currentSession *melody.Session, msg []byte) {

	var message Message

	// 解析json
	err := json.Unmarshal(msg, &message)
	if err != nil {
		// 如果存在错误，则
		message.Type = ErrorMsg
	}

	// 获取到 当前客户端 id
	idAny, _ := currentSession.Get("id")
	id := idAny.(int)
	message.CurrentId = id

	// 格式化消息 并发送
	message.FormatSendMsg()
}
